/** 
 * @author: 大橙子
 * @date: 2015-07-30  
 * @Description: json 解析 使用了gson 解析
 */
package com.bra.utils;

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import com.google.gson.reflect.TypeToken;

public class JsonUtils {

	/**
	 * 将给定的 JSON 字符串转换成指定的类型对象。
	 * 
	 * @param <T>
	 *            要转换的目标类型。
	 * @param json
	 *            给定的 JSON 字符串。
	 * @param clazz
	 *            要转换的目标类。
	 * @return 给定的类型对象。
	 */
	public static <T> T fromJson(String jsonStr, Class<T> className) {
		if (isEmpty(jsonStr))
			return null;

		Gson gson = new Gson();
		T t = null;
		try {
			t = gson.fromJson(jsonStr, className);
		} catch (JsonSyntaxException e) {
			throw e;
		}
		return t;
	}

	/**
	 * 返回指定类型集合
	 * @param jsonStr
	 * @param clazz
	 * @param key
	 */
	public static <T> List<T> fromJson(String jsonStr, Class<T> clazz, String key) {
		if (isEmpty(jsonStr)) {
			return null;
		}
		String json = getJsonStr(jsonStr, key);
		Gson gson = new Gson();
		List<T> list = new ArrayList<T>();
		try {
			JSONArray jsonArray = new JSONArray(json);
			for (int i = 0; i < jsonArray.length(); i++) {
				list.add(gson.fromJson(jsonArray.getString(i), clazz));
			}
		} catch (JSONException e) {
			e.printStackTrace();
		}
		return list;
	}

	/**
	 * 将给定的 JSON 字符串转换成指定类型的List对象。
	 * 
	 * @param json
	 *            给定的 JSON 字符串。
	 * 
	 * @return HashMap数组 ArrayList
	 */
	public static <HashMap> ArrayList<HashMap> fromJsonList(String jsonStr) {
		if (isEmpty(jsonStr))
			return null;

		Gson gson = new Gson();
		TypeToken<ArrayList<HashMap>> token = new TypeToken<ArrayList<HashMap>>() {
		};
		return gson.fromJson(jsonStr, token.getType());
	}

	public static boolean isEmpty(String str) {
		boolean flag = false;
		if (str == null || "".equals(str)) {
			flag = true;
		}
		return flag;
	}

	/**
	 * @param jsonStr
	 * @param name
	 * @return
	 */
	public static String getJsonStr(String jsonStr, String name) {
		JSONObject jsonObject = null;
		try {
			jsonObject = new JSONObject(jsonStr);
		} catch (JSONException e) {
			e.printStackTrace();
		}
		if (jsonObject!=null) {
			return jsonObject.optString(name);
		}else{
			return "";
		}
		
	}

	/**
	 * Flag为1的时候为成功，Flag为0的时候为失败
	 * 
	 * @param JsonStr
	 * @param name
	 * @return
	 */
	public static int getFlag(String JsonStr, String name) {
		JSONObject jsonObject = null;
		try {
			jsonObject = new JSONObject(JsonStr);
		} catch (JSONException e) {
			e.printStackTrace();
		}
		return jsonObject.optInt(name);
	}
}
